home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 09 - 1993 / 09.08 Aug 93 / Icons In Lists / TestApplication.c < prev   
Encoding:
C/C++ Source or Header  |  1994-11-06  |  3.8 KB  |  196 lines  |  [TEXT/KAHL]

  1. DialogPtr Ex1Win,Ex2Win;
  2. MenuHandle myMenus[2]; 
  3. ListHandle Ex1List,Ex2List;
  4.  
  5. main() 
  6. {
  7.     InitGraf(&thePort);
  8.     InitFonts();
  9.     FlushEvents(everyEvent,0);
  10.     InitWindows();
  11.     InitMenus();
  12.     TEInit();
  13.     InitDialogs(0L);
  14.     MaxApplZone(); 
  15.  
  16.     Setup(); 
  17.     InitCursor(); 
  18.     while(MainEvent());
  19. }
  20.  
  21. MainEvent() 
  22. {
  23.     EventRecord        myEvent;
  24.     WindowPtr        whichWindow; 
  25.     DialogPtr        dum; 
  26.     int                j; 
  27.     register char    theChar;
  28.     unsigned char    code; 
  29.     Rect r;
  30.     GrafPtr            saveport; 
  31.  
  32.     if(WaitNextEvent(everyEvent,&myEvent,0L,0L)){
  33.         switch (myEvent.what){
  34.             case mouseDown:
  35.                 switch(FindWindow(myEvent.where,&whichWindow)){
  36.                     case inDesk: 
  37.                         break;
  38.                     case inGoAway: 
  39.                         break;
  40.                     case inMenuBar:
  41.                         return(DoCommand(MenuSelect(myEvent.where)));
  42.                     case inSysWindow:
  43.                         SystemClick(&myEvent,whichWindow);
  44.                         break;
  45.                     case inDrag:
  46.                         break;
  47.                     case inGrow:
  48.                     case inContent:
  49.                         DoMouseDown(whichWindow,&myEvent); 
  50.                         break;
  51.                     default: ;
  52.                 } /* switch FindWindow */
  53.                 break;
  54.             case activateEvt: 
  55.                 dum=(DialogPtr)myEvent.message; 
  56.                 if(dum==Ex1Win || dum==Ex2Win){
  57.                     LActivate(myEvent.modifiers & activeFlag,
  58.                         (dum==Ex1Win) ? Ex1List : Ex2List);
  59.                 }
  60.                 break;
  61.             case updateEvt: 
  62.                 dum=(DialogPtr)myEvent.message; 
  63.                 if(dum==Ex1Win || dum==Ex2Win){
  64.                     GetPort(&saveport); 
  65.                     SetPort(dum); 
  66.                     BeginUpdate(dum);
  67.                     LUpdate((**((dum==Ex1Win) ? Ex1List : Ex2List)).port->visRgn,(dum==Ex1Win) ? Ex1List : Ex2List); 
  68.                     EndUpdate(dum); 
  69.                     SetPort(saveport);
  70.                 }
  71.                 break;
  72.             default: ;
  73.         } /* end of case myEvent.what */
  74.     } /* if */
  75.     return 1;
  76. }
  77.  
  78. Setup()
  79. {
  80.     Rect box,dB;
  81.     Point cz; 
  82.     Handle tItem;
  83.     int j;
  84.  
  85.     myMenus[0]=GetMenu(128);
  86.     AddResMenu(myMenus[0],'DRVR');
  87.     myMenus[1]=GetMenu(129); 
  88.     InsertMenu(myMenus[0],0);
  89.     InsertMenu(myMenus[1],0);
  90.     DrawMenuBar(); 
  91.     Ex1Win=GetNewDialog(128,0L,(Ptr)-1L);
  92.     SetPort(Ex1Win);
  93.     TextFont(4);
  94.     TextSize(9); 
  95.     Ex2Win=GetNewDialog(129,0L,(Ptr)-1L);
  96.     GetDItem(Ex1Win,1,&j,&tItem,&box);
  97.     SetRect(&dB,0,0,1,0); 
  98.     cz.h=50;
  99.     cz.v=56;
  100.     Ex1List=LNew(&box,&dB,cz,129,Ex1Win,false,false,false,true);
  101.     GetDItem(Ex2Win,1,&j,&tItem,&box);
  102.     SetRect(&dB,0,0,1,0); 
  103.     cz.h=box.right-box.left;
  104.     cz.v=16;
  105.     Ex2List=LNew(&box,&dB,cz,130,Ex2Win,false,false,false,true); 
  106.     BuildLists();
  107. }
  108.  
  109. BuildLists()
  110. {
  111.     Handle Icons[3],SmIcons;
  112.     register int i;
  113.     FileParam pb; 
  114.     unsigned char filnam[63],type; 
  115.     int vol,bot; 
  116.     Cell theCell; 
  117.  
  118.     for(i=0;i<3;i++){
  119.         Icons[i]=GetResource('ICON',i+128); 
  120.         HLock(Icons[i]);
  121.     }
  122.     SmIcons=GetResource('SICN',128);
  123.     (**Ex2List).userHandle=SmIcons; 
  124.  
  125.     GetVol(filnam,&vol); 
  126.     pb.ioCompletion=0L;
  127.     pb.ioFDirIndex=1; 
  128.     pb.ioNamePtr=filnam; 
  129.     pb.ioVRefNum=vol; 
  130.     theCell.h=theCell.v=0; 
  131.     bot=(**(Ex1List)).dataBounds.bottom;
  132.     while(PBGetFInfo(&pb,false)!=fnfErr){
  133.         if((pb.ioFlAttrib & 16)!=0)type=0;
  134.         else if(pb.ioFlFndrInfo.fdType=='APPL')type=2;
  135.         else type=1;
  136.         LAddRow(1,++bot,Ex1List);
  137.         theCell.v=LAddRow(1,bot,Ex2List);
  138.         LSetCell(*Icons[type],128,theCell,Ex1List);
  139.         LAddToCell(filnam,(int)filnam[0]+1,theCell,Ex1List);
  140.         LSetCell(filnam,(int)filnam[0]+1,theCell,Ex2List);
  141.         LAddToCell(&type,1,theCell,Ex2List); 
  142.         pb.ioFDirIndex++;
  143.     }
  144.     LDoDraw(true,Ex1List);
  145.     LDoDraw(true,Ex2List);
  146. }
  147.  
  148. DoMouseDown(d,e)
  149. EventRecord *e;
  150. DialogPtr d;
  151. {
  152.     GrafPtr saveport; 
  153.     ListHandle LH;
  154.     Cell theCell; 
  155.     Rect box; 
  156.     
  157.     if(d!=FrontWindow()){
  158.         SelectWindow(d); 
  159.         return;
  160.     }
  161.     GetPort(&saveport); 
  162.     SetPort(d); 
  163.     LH=(d==Ex1Win) ? Ex1List : Ex2List;
  164.     GlobalToLocal(&(e->where));
  165.     box=(**LH).rView; 
  166.     box.right+=15;
  167.     if(PtInRect(e->where,&box)){
  168.         LClick(e->where,e->modifiers,LH); 
  169.     }
  170.     SetPort(&saveport);
  171. }
  172.  
  173. DoCommand(mResult)
  174. long mResult;
  175. {
  176.     int        theItem; 
  177.     char    n[32]; 
  178.     
  179.     theItem=LoWord(mResult); 
  180.     switch(HiWord(mResult)) {
  181.         case 128:
  182.             if (theItem==1)break; 
  183.             else { 
  184.                 GetItem(myMenus[0],theItem,n); 
  185.                 OpenDeskAcc(&n); 
  186.             }
  187.             break;
  188.         case 129: 
  189.             ExitToShell(); 
  190.             break;
  191.     }
  192.     HiliteMenu(0);
  193.     return(1);
  194. }
  195.  
  196.